// 网页类，读取网页库文件，并把信息保存到相应的容器中

#ifndef __WEBPAGE_HPP__
#define __WEBPAGE_HPP__

#include "split_tool.hpp"

#include <string>
#include <vector>
#include <unordered_map>
#include <unordered_set>

using std::string;
using std::vector;
using std::unordered_map;
using std::unordered_set;

namespace gcj
{

class WebPage
{
    friend bool operator==(const WebPage &lhs, const WebPage &rhs);
    friend bool operator<(const WebPage &lhs, const WebPage &rhs);

public:
    //使用了配置文件的构造函数
    /* WebPage(string &doc, Configuration &config, WordSegmentation &jieba); */
    WebPage(const string & doc); //构造函数
    ~WebPage() = default;

    long getDocID();            //获取文档的id
    string getTitle();          //获取文档的标题，<title>...</title>里的内容
    string getUrl();            //获取文档的url
    string getContent();        //获取文档的内容
    unordered_map<string, int> &getWordsMap();    //获取文档的词频统计map
    /* void processDoc(const string &doc); //对格式化的文档进行处理 */
    vector<string> calcTopK(vector<string>& wordsVec, 
                  int k);   //求取文档的topk词集，用来网页去重

private:
    const static int TOPK_NUMBER = 20;//用来设置网页去重要参考的词数
    string _doc;                //<doc>...<\doc>里的内容，不能用引用
    SplitTool* _jieba;          //分词工具
    long _docID;                //文章id
    string _docTitle;           //文章标题
    string _docUrl;             //文档的URL
    string _docContent;         //文档内容
    string _docSummary;         //文档摘要，需要自动生成，不是固定的
    vector<string> _topWords;   //词频最高的前TOPK个词，作为特征词
    unordered_map<string, int> _wordsMap; //保存每篇文档的所有词语和词频，不包含停用词
    set<string> _stopWords;     //停止词，更好的办法应该是单例类！！
};

}//end of namespace std

#endif
